﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Windows.Forms;
using log4net;
using SegIdenPC.Herramientas;
using SegIdenPC.Entidad;


namespace SegIdenPC.Formularios
{
    public partial class mdiPrincipal : Form
    {
        #region --- Variables y Propiedades ---
        private static readonly ILog log = LogManager.GetLogger(typeof(mdiPrincipal));

        private const string FORMATO_DATOSUSUARIO = "Usuario: {0}";
        private const string FORMATO_DATOSTIENDA = "Tienda: {0}";

        #endregion

        #region --- Constructor ---
        public mdiPrincipal()
        {
            InitializeComponent();
        }
        #endregion

        #region --- Eventos Formulario ---
        private void mdiPrincipal_Load(object sender, EventArgs e)
        {
            cargarFormulario();
        }

        private void mnuSolicitud_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantSolicitud>(new frmMantSolicitud());
        }
         private void mnuMantUsuarios_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantUsuario>(new frmMantUsuario());
        }

        private void mnuMantClientes_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantCliente>(new frmMantCliente());
        }

        private void mnuMantProveedores_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantProveedor>(new frmMantProveedor());
        }

        private void mnuMantProductos_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantProducto>(new frmMantProducto());
        }

        private void mnuMantDiseniador_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantDecorador>(new frmMantDecorador());
        }

        private void mnuMantTransportes_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantTransporte>(new frmMantTransporte());
        }

        private void mnuMantTiendas_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantTienda>(new frmMantTienda());
        }

        private void mnuPrestamos_Click(object sender, EventArgs e)
        {
            //formularioAbrirGenerico<frmMantPrestamo>(new frmMantPrestamo());
        }

        private void préstamosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantPrestamo>(new frmMantPrestamo());
        }

        private void alertaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmAlertaCorreo>(new frmAlertaCorreo());
        }

        private void mnuMantenimientos_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantenimiento>(new frmMantenimiento());
        }

        private void mnuComprasImportaciones_Click(object sender, EventArgs e)
        {
            //formularioAbrirGenerico<frmCompraImportacion>(new frmCompraImportacion());
            formularioAbrirGenerico<frmMantOrdenCompra>(new frmMantOrdenCompra());
        }

        private void mnuComprasLocales_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmCompraLocal>(new frmCompraLocal());
        }

        private void mnuComprasRegistrarCostos_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmCompraPrecios>(new frmCompraPrecios());
        }

        private void mnuSalir_Click(object sender, EventArgs e)
        {
            salir();
        }

        private void mnuConfiguracion_Click(object sender, EventArgs e)
        {
            using (frmConfiguracion frmConfiguracion = new frmConfiguracion())
            {
                frmConfiguracion.ShowDialog();
            }
        }

        private void mnuNiveles_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantNiveles>(new frmMantNiveles());
        }

        private void mnuVentasGeneracion_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmVenta>(new frmVenta());
        }

        private void mnuVentasImprimir_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantFacturacion>(new frmMantFacturacion());
        }

        private void mnuReportes_Click(object sender, EventArgs e)
        {

        }
        private void mnuMantSolBultos_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantSolicitudBulto>(new frmMantSolicitudBulto());
        }

        private void productosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantSolicitudBultoProducto>(new frmMantSolicitudBultoProducto());
        }
        private void mnuGuiaImprimir_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmGuiaImprimir>(new frmGuiaImprimir());
        }

        private void mnuReportes_ButtonClick(object sender, EventArgs e)
        {

        }

        private void reporteVentasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmReporteVenta>(new frmReporteVenta());
        }

        private void reporteContenidoFacturaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmReporteContenidoFactura>(new frmReporteContenidoFactura());
        }

        private void mnuReporteInventario_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmReporteInventario>(new frmReporteInventario());
        }

        private void mnuCrearInventario_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmGestionInventario>(new frmGestionInventario());
        }

        private void mnuAjusteInventario_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmAjusteInventario>(new frmAjusteInventario());
        }

        private void reporteProveedorToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmReporteProveedor>(new frmReporteProveedor());
        }

        private void mnuReporteProductos_Click_1(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmReporteProducto>(new frmReporteProducto());
        }

        private void reporteDespachosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmReporteDespachos>(new frmReporteDespachos());
        }

        private void reportePrestamosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmReportePrestamo>(new frmReportePrestamo());
        }

        private void reporteContenidoGuiaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmReporteContenidoGuia>(new frmReporteContenidoGuia());
        }

        private void productoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantNivelProducto>(new frmMantNivelProducto());
        }

        private void tipoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantNivelTipoProducto>(new frmMantNivelTipoProducto());
        }

        private void materialToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantNivelMaterial>(new frmMantNivelMaterial());
        }

        private void colorToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formularioAbrirGenerico<frmMantNivelColor>(new frmMantNivelColor());
        }

        private void mnuVentasBATCH_Click(object sender, EventArgs e)
        {
            using (frmSincronizar frmSincronizar = new frmSincronizar())
            {
                frmSincronizar.ShowDialog();
            }
        }

        private void formularioAbrirGenerico<T>(Form formulario)
        {
            if (this.ActiveMdiChild != null) { return; }

            T frmT = (T)Convert.ChangeType(this.ActiveMdiChild, typeof(T));
            if (frmT == null)
            {
                //formulario = Activator.CreateInstance<T>();
                formulario.MdiParent = this;
                formulario.Show();

            }
        }
        #endregion

        #region --- Metodos Propios ---
        private void cargarFormulario()
        {
            using (frmLogin login = new frmLogin())
            {
                if (login.ShowDialog() == DialogResult.Cancel)
                {
                    Environment.Exit(0);
                }
                else
                {
                    // Estableciendo los datos de usuario que inicio sesion y la tienda
                    ParametrosAplicacion.USUARIO_ACTUAL = login.UsuarioSesion;
                    ParametrosAplicacion.TIENDA_ACTUAL = login.TiendaSesion;

                    // Mostrar Opciones permitidas
                    mostrarOpcioneMenu();

                    // Mostrar nombres y apellidos del usuario
                    this.tslEstado.Text = string.Format(FORMATO_DATOSUSUARIO, login.UsuarioSesion.nombresyApellidos);

                    // Mostrar Tienda
                    this.tslTienda.Text = string.Format(FORMATO_DATOSTIENDA, login.TiendaSesion.nombre);


                }
            }
        }

        private void mostrarOpcioneMenu()
        {
            foreach (Modulo modulo in ParametrosAplicacion.USUARIO_ACTUAL.rol.listaModulo.lista)
            {
                switch (modulo.codigo)
                {
                    case Constantes.CODIGO_MODULO_MAESTROS:
                        this.mnuMaestros.Visible = true;
                        this.mnuSeparadorMaestros.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_COMPRAS:
                        this.mnuCompras.Visible = true;
                        this.mnuSeparadorCompraVenta.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_VENTAS:
                        this.mnuVentas.Visible = true;
                        this.mnuSeparadorCompraVenta.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_PRESTAMOS:
                        this.mnuPrestamos.Visible = true;
                        this.mnuSeparadorPresMant.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MANTENIMIENTOS:
                        this.mnuMantenimientos.Visible = true;
                        this.mnuSeparadorPresMant.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_SOLICITUD_TRANSFERENCIA:
                        this.mnuTransferencia.Visible = true;
                        this.mnuSeparadorTranInv.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_INVENTARIO:
                        this.mnuInventario.Visible = true;
                        this.mnuSeparadorTranInv.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_REPORTES:
                        this.mnuReportes.Visible = true;
                        this.mnuSeparadorTranInv.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MAESTROS_CLIENTES:
                        this.mnuMantClientes.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MAESTROS_USUARIOS:
                        this.mnuMantUsuarios.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MAESTROS_PROVEEDORES:
                        this.mnuMantProveedores.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MAESTROS_PRODUCTOS:
                        this.mnuMantProductos.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MAESTROS_TRANSPORTES:
                        this.mnuMantTransportes.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MAESTROS_DISENIADOR:
                        this.mnuMantDiseniador.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MAESTROS_TIENDA:
                        this.mnuMantTiendas.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MAESTROS_NIVELES:
                        this.mnuNiveles.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_COMPRAS_IMPORTACIONES:
                        this.mnuComprasImportaciones.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_COMPRAS_LOCALES:
                        this.mnuComprasLocales.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_VENTAS_GENERAR:
                        this.mnuVentasGeneracion.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_VENTAS_IMPRIMIR:
                        this.mnuVentasImprimir.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_TRANSFERENCIA_SOLICITUD:
                        this.mnuSolicitud.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_MANTENIMIENTO_TRANSFERENCIA_SOLICITUD:
                        this.mnuMantSolicitud.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_GUIAS_IMPRIMIR:
                        this.mnuGuiaImprimir.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_REPORTES_INVENTARIO_VALORIZADO_TIENDA:
                        this.mnuReporteInventario.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_REPORTES_INVENTARIO_TIENDA:
                        this.mnuReporteInventario.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_REPORTES_VENTAXCLIENTE:
                        this.mnuReporteVenta.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_REPORTES_VENTAXDECORADOR:
                        this.mnuReporteVenta.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_REPORTES_VENTAXFECHA:
                        this.mnuReporteVenta.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_REPORTES_VENTAXPRODUCTO:
                        this.mnuReporteVenta.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_CREAR_INVENTARIO:
                        this.mnuCrearInventario.Visible = true;
                        break;
                    case Constantes.CODIGO_MODULO_AJUSTAR_INVENTARIO:
                        this.mnuAjusteInventario.Visible = true;
                        break;
                    default:
                        break;
                }
            }
        }

        private void salir()
        {
            Environment.Exit(0);
        }
        #endregion

        private void importarToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

      







  
    }
}
